動画から3Dシーンを生成するAI「3D Gaussian Splatting」を試してみた
3D Gaussian Splattingとは
自分でやった結果
自分がgoogle Colabで試した結果を載せます。 一応できたので面白かったのですが、いまいち良い結果は得られませんでした。他の方が試した動画を見るともう少し綺麗です。学習の実行時間には1時間程度かかりました。 精度がいまいちだったのは
- 学習に使用した写真の枚数が少ない
- スペック不足
- カメラ位置の推定(colmap)の設定が上手く出来てなかったかも?
- 写真の画質が低い
とかなのかなと思います。 あとgoogle colabの無料枠を使った感想ですが、今回の用途だとスペック不足なのもあり、あまり向いてなかったかもと思いました。あと、colabからGoogleドライブのインポートをしていれば上手くできたのかもしれませんが、インスタンスはセッションが切れると90分経過で消えます。学習の実行時間が長かったり、環境構築がうまくいかず調べながらなので、一旦疲れたし寝よって思うとインスタンスが消えてデータがリセットされました。colabは無料で手軽ですが、GCEやEC2でインスタンスを立てた方が今回は良かったと思いました。
Luma AI
今回は環境構築から自分で試しましたが、Luma AIという企業がすでに3DGSを自社アプリで機能として提供しています。 手軽に試したい人はおすすめです。iOS16以降に対応しており無料で使えます。Androidには非対応です。Web版は一回の利用に1ドルかかります。
やり方
ハードウェア要件
- Compute Capability 7.0以上の CUDA 対応 GPU
- 24 GB VRAM (推奨)
ソフトウェア要件
- Conda (推奨)
- PyTorch拡張用のC++コンパイラ
- PyTorch拡張用のCUDA SDK 11
- C++ コンパイラ
データセットを作成(ローカル環境)
ffmpeg -ss 0 -i video.mp4 -t 30 -r 4 -q:v 1 -f image2 %06d.jpg
ffmpeg -ss [開始時間] -i [入力ファイル] -t [切り出す時間範囲] -r [1秒間から切り出す枚数] -q:v [出力画像の品質(1が高画質)] -f image2 %06d.jpg
次に、colmapという複数の写真からカメラ位置や向きを推定してくれるツールを使って、データセットを作成します。 colmapもcolab上で動かしたかったのですが、自分のやり方が悪かったのかソースコードからビルド、実行すると何故か著しく精度が低くなりました。そこでMacで実行可能なappファイルが配布されていたので、そちらを使ってローカル環境でデータセットを作成しました。 自分はCOLMAP-3.5-mac-no-cuda.zipを利用しました。それ以上のバージョンだとうまく動作しなかったです。
ローカルで動かした場合は、このエラーが出て、カメラのモデルをSIMPLE_PINHOLEに変更する必要がありました。 自分はFILE > Export model as text でテキスト形式で出力したファイルを編集して、SIMPLE_PINHOLEに変更して再度インポートすることで解決しました。
環境構築(Colab)
スペック確認
一応スペック確認をする場合は、以下のコマンドでColabで割り当てられたGPUのスペックやcudaのバージョンを確認できます。 Colabでは先頭にビックリマークをつけるとLinuxコマンドとして実行されます。
!nvidia-smi
!nvcc -V
NVIDIA Tesla T4 16GB GDDR6メモリ Compute Capability 7.5 Cuda v12.2
インストール
3DGS本体と、サブモジュールのインストールを行います。
%cd /content
!git clone --recursive https://github.com/camenduru/gaussian-splatting
!pip install -q plyfile
%cd /content/gaussian-splatting
!pip install -q /content/gaussian-splatting/submodules/diff-gaussian-rasterization
!pip install -q /content/gaussian-splatting/submodules/simple-knn
学習
!python train.py -s /content/colmap_ws
GUIビューワー
感想
3DGSのgithubのREADMEを読むと、サンプルのcolabのテンプレートが紹介されていました。それを見てcolabで手軽にできるならと始めましたが、環境構築の時 colmapやビューワーのインストールで詰まってたり、うまく動いてくれないとかで難しかったです。windowsであれば他のブログでもやっている人を見かけたり、windows向けのビューワーのビルド済みファイル配布されていたりで簡単そうでした。 写真かと思うほどリアルな三次元データがカメラで撮影するだけで誰でも作れる、というのはすごく面白い技術だと思いました。取り壊し予定の建物を三次元データ化して思い出として残しておく、などの使い方も良さそうですね。